package com.jm.day24.e_demo3.service;

import com.jm.day24.e_demo3.dao.AccountDao;
import com.jm.day24.utils.JdbcUtils;

public class AccoutService {


    public boolean transfer(String out ,String in, Double money){
        boolean isSuccess = true;

        AccountDao dao = new AccountDao();


        /**
         * 存在问题：Connection对象是属于dao层的代码，出现在了service层，我们称这种现象为入侵。
         * 原因：因为要在service里控制事务，所以Connection出现在了service层
         * 解决方案：把事务控制的代码封装起来，在service里调用封装好的方法完成事务控制，这样话，Connection就没必要出现在service层，可以解决入侵问题
         */

        /**
         * 入侵问题解决后又出现了新的问题：
         * Connection对象在JdbcUtils类里，而在dao的代码里需要使用Connection，我们需要把Connection传递给dao
         */
        /*Connection conn = null;*/

        try {
            JdbcUtils.startTransaction();
            dao.out(out,money);

            //int i= 1/0;

            dao.in(in,money);

            JdbcUtils.commitAndClose();

        } catch (Exception throwables) {
            JdbcUtils.rollbackAndClose();
            isSuccess = false;
            //throwables.printStackTrace();
        }
        return isSuccess;
    }

}
